# -*- coding: utf-8 -*-
# @Time    : 2022/10/8 21:36
# @Author  : 修远
# @File    : setting.py
# @Comment : 
import datetime


class Config(object):
    pass


class DevelopmentConfig(Config):
    # 数据库配置
    DB_HOST = "127.0.0.1"
    DB_PORT = 3306
    DB_USER = "root"
    DB_PASSWD = "root"
    DB_NAME = "test"
    REDIS_HOST = "127.0.0.1"
    REDIS_PASSWD = ""
    REDIS_PORT = 6379
    REDIS_DB0 = 0
    REDIS_DB1 = 1

    SQLALCHEMY_DATABASE_URI = f'mysql+mysqlconnector://{DB_USER}:{DB_PASSWD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    SQLALCHEMY_COMMIT_TEARDOWN = True

    REDIS_URL = f"redis://:{REDIS_PASSWD}@{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB0}"

    # 消息代理
    CELERY_BROKER_URL = f"redis://:{REDIS_PASSWD}@{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB1}"
    # 任务结果写入redis
    CELERY_RESULT_BACKEND = f"redis://:{REDIS_PASSWD}@{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB1}"
    # 设置任务序列化方法
    CELERY_TASK_SERIALIZER = 'json'
    # 设置结果序列化方法
    CELERY_RESULT_SERIALIZER = 'json'
    # worker并发数 默认为CPU核数
    CELERYD_CONCURRENCY = 2
    # 开启延迟确认(默认为false)
    # PS: 开启延迟确认使worker只有在任务完成（成功/失败）的情况下，才向broker发送确认信息。在任务信息不能丢失的场景中，这个功能是及其有用的
    CELERY_ACKS_LATE = True
    # 忽略任务结果(成功or失败的信息)
    CELERY_IGNORE_RESULT = True
    # 为True时，即使CELERY_IGNORE_RESULT=True，也会存储错误。
    CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True
    # 任务预取功能：即每个worker在broker获取task时会尽量拿n个，以压缩获取任务的通讯成本，1表示关闭此功能；0表示尽可能多拿；
    CELERYD_PREFETCH_MULTIPLIER = 1
    # 监控客户端事件队列被删除前的过期时间
    CELERY_EVENT_QUEUE_EXPIRES = 7200
    # 时区，默认为UTC
    CELERY_TIMEZONE = 'Asia/Shanghai'
    # 如果指定了msgpack序列化方式，需要增加msgpack为可接受
    CELERY_ACCEPT_CONTENT = ['application/json']
    # 设置该任务等待一段时间在执行，单位为秒
    COUNTDOWN = 20

    DEBUG = True


class ProductionConfig(Config):
    pass


config = {
    'default': DevelopmentConfig
}
